#ifndef SYMBOLEVALUE_H
#define SYMBOLEVALUE_H

#include <string.h>
#include <iostream>

using namespace std;

#include "Symbole.h"
#include "Arbre.h"

// un symbole valué est un symbole qui a une valeur (définie ou pas) et c'est aussi une feuille de l'arbre abstrait
class SymboleValue : public Symbole, public Noeud
{
    public:
        SymboleValue(Symbole s);    // construit un symbole valué à partir d'un symbole existant s
        ~SymboleValue() {}
        void        afficher(unsigned short indentation = 0);                       // affiche le symbole en tant que noeud de l'arbre
        inline int  getValeur()
        {
            return this->m_valeur;                            // accesseur
        }
        inline void setValeur(int valeur)
        {
            this->m_valeur = valeur;    // accesseur
            this->m_defini = true;
        }
        inline bool estDefini()
        {
            return this->m_defini;                            // accesseur
        }

        friend ostream & operator << (ostream & cout, SymboleValue symb);   // affiche un symbole value sur cout

    private:
        bool m_defini;  // indique si la valeur du symbole est définie
        int  m_valeur;  // valeur du symbole si elle est définie, zéro sinon
};

#endif /* SYMBOLEVALUE_H */
